From: Alejandro PiƱeiro Date: Thu, 22 Aug 2013 18:01:53 +0000 (+0200) Subject: a11y: add the possibility to set the accessible object of a widget X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~3593 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=bd28d5c48af87e34c99cf20cc18c409cca1a1080;p=gnome-shell.git a11y: add the possibility to set the accessible object of a widget In the common case, the accessible object is created by the own widget. In some cases it is needed to specify a custom accessible, as some of the logic will be implemented on the javascript code (extend functionality using Components vs Hierarchy). https://bugzilla.gnome.org/show_bug.cgi?id=648623 --- diff --git a/src/st/st-widget.c b/src/st/st-widget.c index 1fdbc520d..f78b19d02 100644 --- a/src/st/st-widget.c +++ b/src/st/st-widget.c @@ -2582,6 +2582,43 @@ st_widget_get_accessible (ClutterActor *actor) return widget->priv->accessible; } +/** + * st_widget_set_accessible: + * @widget: A #StWidget + * @accessible: an accessible (#AtkObject) + * + * This method allows to set a customly created accessible object to + * this widget. For example if you define a new subclass of + * #StWidgetAccessible at the javascript code. + * + * NULL is a valid value for @accessible. That contemplates the + * hypothetical case of not needing anymore a custom accessible object + * for the widget. Next call of st_widget_get_accessible() would + * create and return a default accessible. + * + * It assumes that the call to atk_object_initialize that bound the + * gobject with the custom accessible object was already called, so + * not a responsibility of this method. + * + */ +void +st_widget_set_accessible (StWidget *widget, + AtkObject *accessible) +{ + g_return_if_fail (ST_IS_WIDGET (widget)); + + if (widget->priv->accessible != accessible) + { + if (widget->priv->accessible) + g_object_unref (widget->priv->accessible); + + if (accessible) + widget->priv->accessible = g_object_ref (accessible); + else + widget->priv->accessible = NULL; + } +} + static const gchar * st_widget_accessible_get_name (AtkObject *obj) { diff --git a/src/st/st-widget.h b/src/st/st-widget.h index 1b207f4d2..424f04970 100644 --- a/src/st/st-widget.h +++ b/src/st/st-widget.h @@ -167,7 +167,8 @@ void st_widget_remove_accessible_state (StWidget *widget, void st_widget_set_accessible_name (StWidget *widget, const gchar *name); const gchar * st_widget_get_accessible_name (StWidget *widget); - +void st_widget_set_accessible (StWidget *widget, + AtkObject *accessible); /* utility methods */ void st_get_align_factors (StAlign x_align, StAlign y_align,